Оригиналът е на  специалист по  и софтуер . В се спряхме на задачата за

...
Оригиналът е на  специалист по  и софтуер .
В се спряхме на задачата за
Коментари Харесай

Използване на FPGA за генериране на VGA видео – втора част

Оригиналът е на  специалист по  и софтуер .

В се спряхме на задачата за програмисти FizzBuzz и на нейната реализация не благодарение на компютър, основан на CPU, а благодарение на програмируема логическа матрица FPGA. Сега ще продължим с оправянето на позволените бъгове, с хардуерната реализация на плана и с по-подробно пояснение на VGA формата.

Грешката, показана в предходното изображение бе в това, че съм вземал идващото значение на FizzBuzz след всеки ред пиксели, а трябваше на всеки 8 реда, с цел да може да се покаже целия знак. По този метод, предходното изображение се образуваше от изрязани елементи на осем разнообразни признака. Увеличаването на брояча FizzBuzz на всеки 8 реда оправя казуса, както е показано по-долу. (Отстраняването на VGA грешките e доста по-лесно, в сравнение с другите проблеми с FPGA, тъй като всичко незабавно се вижда на екрана. Не се постанова да се включва и гледа осцилограф, с цел да се разбере какво тъкмо се е случило).
Извеждането на FizzBuzz на VGA монитора
Сега към този момент мониторът вярно демонстрира решението на програмистката задача FizzBuzz, единствено че един неподвижен екран е нещо прекомерно скучно. Промяната на цвета на предния проект и фона на всеки един ред напълно не е комплицирано – използваме някои от битовете на смисъла на y за  аления, зеления и синия цветове. По този метод получаваме пъстър текст в жанр 80-те години на предишния век.
Ако цветът на текста и на фона зависят от номера на реда, то текстът става по-интересен
След това взех решение да прибавя примитивна анимация. Най-напред е належащо в модула vga да бъде добавена индикация, че следва възобновяване на екрана, като това е ново поле на всеки 1/60 секунди. Аз използвах това за динамична смяна на цветовете (Съветвам ви да не променяте цвета 60 пъти в секунда, в случай че не желаете да предизвикате главоболие. По-добре използвайте брояч).

Тестването и пробването на другите графични резултати е радостно и вълнуващо, тъй като резултатът незабавно се вижда. Аз раздвижих “Fizz ” и “Buzz ” със цветна диря зад тях (в жанр Nyan Cat). За тази цел трансформирах началните позиции на знаците в сходство с брояча. За постигането на цветните дъги зад знаците избрах цветове съгласно номерата на редовете (ето за какво всеки ред със знаци може да има друг цвят) и прибавих цветна дъга откъм гърба.
Крайният резултат
И най-после прибавих още един резултат – гигантските думи “Fizz ” и “Buzz ”, които отскачат от стените на екрана. Ефектът се базира на подскачане на незабележим силует (както е при  FPGA Pong), вътре в който е сложена съответната дума. Променливата dx следи направлението по хоризонтала, а dy – по вертикала. За всеки нов екран – т.е., 60 пъти в секунда, X и Y координатите се усилват или понижават въз основата на заложените в съответните променливи посоки. Ако този силует доближи десния или левия край, то dx трансформира знака. Аналогично dy се превключва, в случай че контурът е достигнал горния или долния край. След това навътре в този силует се изобразява текст с огромни размери благодарение на различен образец на генератор на знаци, какъвто бе разказан в предходната част. Думата се усилва 8 пъти посредством отхвърлянето на трите младши бита на координата. Навярно към този момент сте се уморили от Verilog и няма да го ползва тук, а единствено ще окажа съответния. Крайният резултат е показан в следния клип:


Хардуерната реализация
В този план използвах напълно опростената платка за разработчици Mojo V3, което е FPGA за начинаещи. Тя се базира на FPGA от семейството Xilinx Spartan 6. Въпреки че това е един от най-малките FPGA, само че той въпреки всичко има 9000 логичен кафези и 11 000 тригера, тъй че този хлапак умее доста неща. Да прибавя, че има още доста разновидности на евтини платки с FPGA чипове.
Включването на FPGA платката към VGA монитора е съвсем банално: единствено три резистора със противодействие 270 Ω. Макетната платка се употребява единствено за по-стабилно закрепване на кабела към проводниците, идващи от платката
Ако ще употребявате някой VGA екран, най-лесно е да се вземе платка за разработчици с FPGA конектор. Но в случай че подобен няма, както е да вземем за пример при Mojo, включването на VGA монитора не е проблем. Просто поставете 270 Ω резистори сред аления, зеления и синия контакти сред изходите на FPGA и входните заключения на VGA. Сигналите за хоризонталната и отвесната синхронизация могат да бъдат взети непосредствено от FPGA.

За написването и синтеза на Verilog използвах средата за създаване на Xilinx с име ISE. За да укажа съответните физически контакти на FPGA, прибавих няколко реда в конфигурационния файл mojo.ucf. Тук аленият извод pin_r подхожда на крачето номер 50 и така нататък
NET " pin_r " LOC = P50 | IOSTANDARD = LVTTL; NET " pin_g " LOC = P40 | IOSTANDARD = LVTTL; NET " pin_b " LOC = P34 | IOSTANDARD = LVTTL; NET " pin_hsync " LOC = P32 | IOSTANDARD = LVTTL; NET " pin_vsync " LOC = P29 | IOSTANDARD = LVTTL;
Извеждането на сигналите от FPGA към VGA е постоянно срещана задача и нейните разнородни решения могат да бъдат открити в Глобалната мрежа в планове като „FPGA Pong“, „24-битов цвят с чипа DAC“, „Платката Basys 3“ и други.
Малко по-подробно за VGA формата
VGA форматът наподобява много необичайно, само че в случай че се вгледаме в историята на малкия екран и на електронно лъчевата тръба, то всичко си идва на местата.Е електронно лъчевата тръба поток от електрони попада върху екрана, осветявайки луминофорното покритие и по този метод се образува изображението. Сканирането става във тип на растерен масив: лъчът сканира екрана отляво на дясно, а по-късно импулсът на хоризонталната синхронизация го принуждава доста бързо да се върне наляво при започване на идващия ред на изображението, като това е хоризонталният противоположен ход на развивката. Този развой се повтаря ред по ред до тогава, до момента в който в долната част на екрана се стигне до края на изображението и тогава стартира отвесният противоположен ход на развивката, при което лъчът се връща в началната позиция горе вляво на екрана. При хоризонталния и отвесния противоположен ход лъчът се стопира и противоположният ход не се демонстрира на екрана. Скицата  по-долу демонстрира накратко действието на растерното сканиране:

Именно тези особености и характерности са мигрирали във VGA мониторите, в това число импулсите на хоризонталната и отвесната синхронизация, както и гасенето на видео сигнала за противоположния ход.

През 1953 година излиза стандартът за цветна телевизия NTSC. Но VGA е доста по-опростен от NTSC, тъй като се употребяват пет проводника за синхронизациите и за цветовите сигнали. Не се постанова всичките тези сигнали да бъдат вмъкнати в един общ сигнал със комплицирано шифроване. Но една от странните особености на NTSC, които се трансферираха към VGA е, че кадровата периодичност на екрана не е тъкмо 60 Hz, а 59,84 Hz.

Лъчът на осцилографа по-долу демонстрира VGA сигнала за два реда от изображението. Импулсите за хоризонтална синхронизация, които са изобразени с жълт цвт демонстрират началото на съответния ред. Малките червени, зелени и сини импулси при започване на реда са белите пиксели на числата от програмистката задача FizzBuzz. Червеният сигнал в средата на линията демонстрира част от плаващата алена дума “Buzz ”.
Лъчите на осцилографа демонстрират аленият, зеленият и синият сигнали на VGA, както и хоризонталната синхронизация Заключение
Генерирането на VGA видео сигнал благодарение на FPGA се оказа доста по-лесно от упованията ми, само че мен надали ще ме вземат на работа, в случай че на изявлението ми дадат задачата FizzBuzz, която да бъде осъществена благодарение на FPGA. само че в случай че се интересувате от FPGA, пред които се обрисува блестящо бъдеще, настоятелно предлагам да експериментирате с видео сигнали. Това не е доста по-сложно от намигване на светодиоди, само че е несравнимо по-полезно. Генерирането на видеосигнал е доста по-интересно, в сравнение с да се търси неточност благодарение на, тъй като резултатът незабавно се вижда на екрана. И даже нещо да не се получи от първия път, резултатът е забавен и може да се каже даже радостен.
Източник: kaldata.com

СПОДЕЛИ СТАТИЯТА


Промоции

КОМЕНТАРИ
НАПИШИ КОМЕНТАР